package com.unsyied.mbg;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Copyright © 2019 Shanghai
 * 用于生产MBG的代码
 * Created by macro on 2018/4/26.
 */
public class Generator {
    static int flag = 0;//用来删除文件计数

    public static void main(String[] args) throws Exception {
        //MBG 执行过程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //当生成的代码重复时，覆盖原代码
        boolean overwrite = false;
        //读取我们的 MBG 配置文件
        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //创建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //执行生成代码
        myBatisGenerator.generate(null);
        //输出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
//        删除多余的文件（未覆盖生成所以会产生***.1 文件）
        String baseDir = System.getProperty("user.dir");
        //删除一个文件夹下的所有文件(包括子目录内的文件)
        File file = new File(baseDir);//输入要删除文件目录的绝对路径
        deleteFile(file);
        System.out.println("共删除" + flag + "个文件");
    }

    public static void deleteFile(File file) {

        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()) {
            System.out.println("文件删除失败,请检查文件路径是否正确");
            return;
        }
        //取得这个目录下的所有子文件对象
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f : files) {
            //打印文件名
            String name = f.getName();
//            System.out.println(name);
            //判断子目录是否存在子目录,如果是文件则删除
            if (f.isDirectory()) {
                deleteFile(f);
            } else {
                if (name.substring(name.length() - 2, name.length()).equals(".1")) {
                    f.delete();
                    flag++;
//                    System.out.println(flag+">>"+name);
                }
            }
        }
        //删除空文件夹  for循环已经把上一层节点的目录清空。
//        file.delete();
    }
}
